package world.snowcrystal.nova.ai.Entity;

import com.zhipu.oapi.Constants;
import com.zhipu.oapi.service.v4.model.ChatCompletionRequest;
import com.zhipu.oapi.service.v4.model.ChatMessage;
import com.zhipu.oapi.service.v4.model.ChatMessageRole;

import java.util.ArrayList;
import java.util.List;

public class ChatCompletionRequestFactory{

    private static final float STABLE_TEMPERATURE = 0.05f;
    private static final float UNSTABLE_TEMPERATURE = 0.9f;




    private ChatCompletionRequest create(List<ChatMessage> messages,Boolean stream,float temperature){
        return  ChatCompletionRequest.builder()
                .model(Constants.ModelChatGLM4)
                .stream(stream)
                .invokeMethod(Constants.invokeMethod)
                .messages(messages)
                .temperature(temperature) // 控制生成文本的随机性，0.9 表示生成文本的随机性较高
                .topP(0.5f) // 控制生成文本的多样性，0.9 表示生成文本的多样性较高
                .maxTokens(1024) // 生成文本的最大长度
                .requestId(String.format("%d", System.currentTimeMillis()))
                .build();
    }
    private ChatCompletionRequest createSSE(List<ChatMessage> messages, float temperature){
        return  ChatCompletionRequest.builder()
                .model(Constants.ModelChatGLM4)
                .stream(Boolean.TRUE)
                .invokeMethod(Constants.invokeMethod)
                .messages(messages)
                .temperature(temperature) // 控制生成文本的随机性，0.9 表示生成文本的随机性较高
                .topP(0.5f) // 控制生成文本的多样性，0.9 表示生成文本的多样性较高
                .maxTokens(1024) // 生成文本的最大长度
                .requestId(String.format("%d", System.currentTimeMillis()))
                .build();
    }

    /**
     *
     * @param message 用户输入的文本 prompt
     * @param stream  如果不启用 stream ，则AI会一次性返回完整结果
     */
    public ChatCompletionRequest create(String message,Boolean stream,float temperature){
            List<ChatMessage> messages = new ArrayList<>();
            messages.add(new ChatMessage(ChatMessageRole.USER.value(), message));
            return  create(messages,stream,temperature);
    }



    public ChatCompletionRequest create(String systemMessage,String userMessage,Boolean stream,float temperature){
        List<ChatMessage> messages = new ArrayList<>();
        messages.add(new ChatMessage(ChatMessageRole.SYSTEM.value(),systemMessage));
        messages.add(new ChatMessage(ChatMessageRole.USER.value(), userMessage));
        return create(messages,stream,temperature);
    }

    /**
     * 创建请求，使用了较高的 Temperature 值(0.9f)
     */
    public ChatCompletionRequest createHighTemperature(String systemMessage,String userMessage,Boolean stream){
        List<ChatMessage> messages = new ArrayList<>();
        messages.add(new ChatMessage(ChatMessageRole.USER.value(), userMessage));
        messages.add(new ChatMessage(ChatMessageRole.SYSTEM.value(),systemMessage));
        return create(messages,stream,UNSTABLE_TEMPERATURE);
    }
    /**
     * 创建请求，使用了较低的 Temperature 值(0.05f)
     */
    public ChatCompletionRequest createLowTemperature(String systemMessage,String userMessage,Boolean stream){
        List<ChatMessage> messages = new ArrayList<>();
        messages.add(new ChatMessage(ChatMessageRole.USER.value(), userMessage));
        messages.add(new ChatMessage(ChatMessageRole.SYSTEM.value(),systemMessage));
        return create(messages,stream,STABLE_TEMPERATURE);
    }


    public ChatCompletionRequest createSSE(String systemMessage, String userMessage, float temperature){
        List<ChatMessage> messages = new ArrayList<>();
        messages.add(new ChatMessage(ChatMessageRole.SYSTEM.value(),systemMessage));
        messages.add(new ChatMessage(ChatMessageRole.USER.value(), userMessage));
        return createSSE(messages,temperature);
    }

    public ChatCompletionRequest createSSE(String userMessage, float temperature){
        List<ChatMessage> messages = new ArrayList<>();
        messages.add(new ChatMessage(ChatMessageRole.USER.value(), userMessage));
        return createSSE(messages,temperature);
    }

}
